﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace HuChaHuRen.HeNan.XiangCheng.Common
{
    public class Hash
    {
        /// <summary>
        /// 计算字符串的 MD5 哈希值
        /// </summary>
        /// <param name="input">要计算 MD5 的字符串</param>
        /// <returns>32个字符的十六进制 MD5 哈希值</returns>
        public static string CalculateMD5(string input)
        {
            // 如果输入为空则返回空
            if (string.IsNullOrEmpty(input))
            {
                return string.Empty;
            }

            // 使用 UTF-8 编码将字符串转换为字节数组
            using (MD5 md5 = MD5.Create())
            {
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);
                byte[] hashBytes = md5.ComputeHash(inputBytes);

                // 将字节数组转换为十六进制字符串
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hashBytes.Length; i++)
                {
                    sb.Append(hashBytes[i].ToString("x2")); // "x2"表示以小写十六进制格式输出，两位对齐
                }

                return sb.ToString();
            }
        }
    }
}
